//package cn.flying.cloud.oauth.server.configuration.token;
//
//import java.security.KeyPair;
//import java.security.KeyPairGenerator;
//import java.security.NoSuchAlgorithmException;
//import java.util.Arrays;
//import java.util.Date;
//import java.util.UUID;
//
//import com.nimbusds.jose.JOSEException;
//import com.nimbusds.jose.JWSAlgorithm;
//import com.nimbusds.jose.JWSHeader;
//import com.nimbusds.jose.crypto.RSASSASigner;
//import com.nimbusds.jwt.JWTClaimsSet;
//import com.nimbusds.jwt.SignedJWT;
//
///**
// * JWT Token生成器
// *
// * @author: admin
// * @date: 2024年05月17日 10:33
// * @version: 1.0
// */
//public class JwtTokenGenerator {
//
//    /**
//     * 生成Token
//     * @param username
//     * @return
//     * @throws NoSuchAlgorithmException
//     * @throws JOSEException
//     */
//    public static String createToken(String username) throws NoSuchAlgorithmException, JOSEException {
//        // 定义JWT的相关声明
//        JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
//                .subject(username) // 主题（用户）
//                .issuer(username) // 签发者
//                .expirationTime(new Date(System.currentTimeMillis() + 3600 * 1000)) // 过期时间，例如1小时后
//                .issueTime(new Date()) // 签发时间
//                .jwtID(UUID.randomUUID().toString()) // JWT ID，用于唯一标识JWT
//                .claim("scope", "all") // 自定义声明，如权限范围
//                .build();
//
//        // 输出JWT字符串
//        String accessToken = getSignedJWT(claimsSet).serialize();
//        return accessToken;
//    }
//
//    /**
//     * 生成Token
//     * @param username
//     * @param jwtId
//     * @param expire
//     * @return
//     * @throws NoSuchAlgorithmException
//     * @throws JOSEException
//     */
//    public static String createToken(String username, String jwtId, long expire) throws NoSuchAlgorithmException, JOSEException {
//        // 定义JWT的相关声明
//        JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
//                .subject(username) // 主题（用户）
//                .issuer(username) // 签发者
//                .expirationTime(new Date(System.currentTimeMillis() + expire)) // 过期时间
//                .issueTime(new Date()) // 签发时间
//                .jwtID(jwtId) // JWT ID，用于唯一标识JWT
//                .claim("scope", "all") // 自定义声明，如权限范围
//                .build();
//
//        // 输出JWT字符串
//        String accessToken = getSignedJWT(claimsSet).serialize();
//        return accessToken;
//    }
//
//    /**
//     * 定义签名密钥
//     *
//     * @return
//     * @throws NoSuchAlgorithmException
//     */
//    private static KeyPair getKeyPair() throws NoSuchAlgorithmException {
//        // 定义签名密钥
//        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
//        keyGen.initialize(2048);
//        KeyPair keyPair = keyGen.generateKeyPair();
//        return keyPair;
//    }
//
//    /**
//     * 获取签名
//     *
//     * @param claimsSet
//     * @return
//     * @throws NoSuchAlgorithmException
//     * @throws JOSEException
//     */
//    private static SignedJWT getSignedJWT(JWTClaimsSet claimsSet) throws NoSuchAlgorithmException, JOSEException {
//        // 定义签名密钥
//        KeyPair keyPair = getKeyPair();
//        RSASSASigner signer = new RSASSASigner(keyPair.getPrivate());
//        // 构建SignedJWT
//        SignedJWT signedJWT = new SignedJWT(
//                new JWSHeader.Builder(JWSAlgorithm.RS256).keyID(Arrays.toString(keyPair.getPublic().getEncoded())).build(),
//                claimsSet);
//        // 签名JWT
//        signedJWT.sign(signer);
//
//        return signedJWT;
//    }
//}